package org.example.Day4.Regex;

public class RegexTest {
    public static void main(String[] args){
        System.out.println("a".matches("[abc]"));//只能匹配abc
        System.out.println("e".matches("[abcd]"));//false

        System.out.println("d".matches("[^abc]"));//不能是abc
        System.out.println("a".matches("[^abc]"));//false

        System.out.println("d".matches("[a-zA-Z]"));//只能是a-z A-z字符

        System.out.println("2".matches("[a-zA-Z]")); // false

        System.out.println("k".matches("[a-z&&[^bc]]"));//a-z除了bc
        System.out.println("b".matches("[a-z&&[^bc]]")); // false

        System.out.println("ab".matches("[a-zA-Z0-9]")); // false
        /*
        以上规则只能匹配单字符
         */
        //只能匹配单字符
        System.out.println("徐".matches("."));//.可以匹配任意字符
        System.out.println("徐徐".matches("."));//false

        System.out.println("\"");//转义

        System.out.println("3".matches("\\d")); // \d: 0-9
        System.out.println("a".matches("\\d")); //false

        System.out.println(" ".matches("\\s")); // \s: 代表⼀个空⽩字符
        System.out.println("a".matches("\s")); // false

        System.out.println("a".matches("\\S")); // \S: 代表⼀个⾮空⽩字符
        System.out.println(" ".matches("\\S")); // false

        System.out.println("a".matches("\\w")); // \w: [a-zA-Z_0-9]
        System.out.println("_".matches("\\w")); // true
        System.out.println("徐".matches("\\w")); // false

        System.out.println("徐".matches("\\W")); // [^\w]不能是a-zA-Z_0-9
        System.out.println("a".matches("\\W")); // false
        System.out.println("23232".matches("\\d")); // false 注意：以上预定义字符都只能匹配单个字符

        System.out.println("a".matches("\\w?")); // ? 代表0次或1次
        System.out.println("".matches("\\w?")); // true
        System.out.println("abc".matches("\\w?")); // false

        System.out.println("abc12".matches("\\w*")); // * 代表0次或多次
        System.out.println("".matches("\\w*")); // true
        System.out.println("abc12张".matches("\\w*")); // false

        System.out.println("abc12".matches("\\w+")); // + 代表1次或多次
        System.out.println("".matches("\\w+")); // false
        System.out.println("abc12张".matches("\\w+")); // false

        System.out.println("a3c".matches("\\w{3}")); // {3} 代表要正好是n次
        System.out.println("abcd".matches("\\w{3}")); // false

        System.out.println("abcd".matches("\\w{3,}")); // {3,} 代表是>=3次
        System.out.println("ab".matches("\\w{3,}")); // false
        System.out.println("abcde徐".matches("\\w{3,}")); // false

        System.out.println("abc232d".matches("\\w{3,9}")); // {3, 9} 代表是⼤于等于3次，⼩于等于9次

        // 4、其他⼏个常⽤的符号：(?i)忽略⼤⼩写 、 或：| 、 分组：()
        System.out.println("abc".matches("(?i)abc")); // true
        System.out.println("ABC".matches("(?i)abc")); // true
        System.out.println("aBc".matches("a((?i)b)c")); // true
        System.out.println("ABc".matches("a((?i)b)c")); // false

        // 需求1：要求要么是3个⼩写字⺟，要么是3个数字
        System.out.println("abc".matches("[a-z]{3}|\\d{3}")); // true
        System.out.println("ABC".matches("[a-z]{3}|\\d{3}")); // false
        System.out.println("123".matches("[a-z]{3}|\\d{3}")); // true
        System.out.println("A12".matches("[a-z]{3}|\\d{3}")); // false
    }
}
